//
//  STStatus.swift
//  STVVeibo
//
//  Created by leergou on 16/7/24.
//  Copyright © 2016年 WhiteHouse. All rights reserved.
//

import UIKit

class STStatus: NSObject {
    //MARK: 模型属性
    // 创建时间
    var created_at: String?
    // 微博ID
    var id: Int64 = 0
    // 微博内容
    var text: String?
    // 微博来源
    var source: String?{
        didSet{
            sourceAttr = getSourceAttr(source)
        }
    }
    // 转发微博
    var retweeted_status: STStatus?
    // 用户数据
    var user: STUser?
    // 原创微博 配图
    var pic_urls: [STPictureInfo]?
    
    // 微博来源处理富文本 -> 对 source 进行处理后的富文本,直接供外界使用
    var sourceAttr: NSMutableAttributedString?
    
    // 转发数
    var reposts_count: Int = 0
    // 评论数
    var comments_count: Int = 0
    // 赞数
    var attitudes_count: Int = 0
    
    // kvc 构造函数
    init(dict:[String: AnyObject]) {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    
    // 由于当前 kvc 只能给当前类的属性赋值,不知道 user 和 retweeted_status是一个模型,所以要判断,重写 setValue(value: forKey key:) 方法
    override func setValue(value: AnyObject?, forKey key: String) {
        
        if key == "user" {
            
            // 判断 value 是否为nil,而且是否可以转为字典
            guard let v = value as? [String: AnyObject] else {
                return
            }
            // 给其赋值
            user = STUser(dict: v)
        } else if key == "retweeted_status"{
            
            guard let v = value as? [String: AnyObject] else {
                return
            }
            retweeted_status = STStatus(dict: v)
        } else if key == "pic_urls"{
            guard let v = value as? [[String: AnyObject]] else {
                return
            }
            
            // 遍历数组,字典转模型
            var tempArray: [STPictureInfo] = [STPictureInfo]()
            for dic in v {
                // 创建一个模型
                let pic = STPictureInfo(dict: dic)
                
                // 添加到临时数组
                tempArray.append(pic)
            }
            // 赋值
            pic_urls = tempArray
        } else {
            // 还是需要父类帮我们赋值
            super.setValue(value, forKey: key)
        }
    }
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
}

//MARK: - 处理富文本
// MVC思想:处理 微博来源的 函数
extension STStatus{

    func getSourceAttr(source: String?) -> NSMutableAttributedString{
        
        guard let s = source where s.containsString("\">") else {
            let str = "iPhone手机"
            return switchToStringAttr(str)
        }
        //  rel=\"nofollow\">皮皮时光机</a>"
        let startRange = s.rangeOfString("\">")!
        let endRange = s.rangeOfString("</")!
        // 截取字符创
        let result = s.substringWithRange(startRange.endIndex..<endRange.startIndex)
        return switchToStringAttr(result)
    }
    
    // 将截取的字符串转成富文本格式
    func switchToStringAttr(result: String) -> NSMutableAttributedString{
        // 最终显示格式
        let result = "来自 " + result
        // 创建 range
        let range = (result as NSString).rangeOfString("来自")
        // 创建一个可变富文本
        let attr = NSMutableAttributedString(string: result)
        // 设置富文本属性
        attr.addAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], range: range)
        
        return attr
    }
}


extension STStatus{
    
    // 重写 父类已有的description 方法
    override var description: String{
        
        let keys = ["created_at","id","text","source","retweeted_status","user","pic_urls","reposts_count","comments_count","attitudes_count"]
        return dictionaryWithValuesForKeys(keys).description
    }
}
















